package javase.Reflect;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Properties;

/*
验证反射机制的灵活性
    在不改变java源码的基础上，可以做得到不同对象的实例化
    非常灵活（符合OCP开发原则:对扩展开放，对修改关闭）

    代码不需要改动，修改配置文件可以创建不同的实例对象

    高级框架底层实现原理，都是采用了框架机制
    有利于剖析框架底层的源代码
 */
public class ReflectTest03 {
    public static void main(String[] args) throws IOException, InstantiationException, IllegalAccessException, ClassNotFoundException {
        // 通过IO流读取classInfo.properties文件
        FileReader reader = new FileReader("classinfo.properties");
        // 创建属性类对象Map
        Properties pro = new Properties();
        // 加载
        pro.load(reader);
        // 关闭流
        reader.close();

        // 通过key获取value
        String className = pro.getProperty("className");
        System.out.println(className);

        Class c =  Class.forName(className);
        Object obj = c.newInstance();
        System.out.println(obj);

    }
}
